#include <stdio.h>
#include <stdlib.h>

// 命令常量
enum {
    CMD_QUIT,   // 退出
    CMD_READ,   // 读取
    CMD_SAVE,   // 保存
    CMD_PRINT,  // 打印
    CMD_QUERY,  // 查询
    CMD_INSERT, // 添加
    CMD_UPDATE, // 修改
    CMD_DELETE, // 删除
    CMD_SORT,   // 排序
    CMD_CHART,  // 图表
};

// 函数声明
void init(void);         // 程序启动
void quit(void);         // 程序退出
void display_menu(void); // 显示命令菜单
int make_choice(void);   // 选择命令
int confirm(const char* msg);

void read_data(void);    // 读取
void save_data(void);    // 保存
void print_data(void);   // 打印
void query_data(void);   // 查询
void add_data(void);     // 添加
void update_data(void);  // 修改
void delete_data(void);  // 删除
void sort_data(void);    // 排序
void make_chart(void);   // 图表

// 主程序
int main(void)
{
    init();
    for (;;) {
        display_menu();
        int c = make_choice();
        switch (c) {
        case CMD_READ:
            read_data();
            break;
        case CMD_SAVE:
            save_data();
            break;
        case CMD_PRINT:
            print_data();
            break;
        case CMD_QUERY:
            query_data();
            break;
        case CMD_INSERT:
            add_data();
            break;
        case CMD_UPDATE:
            update_data();
            break;
        case CMD_DELETE:
            delete_data();
            break;
        case CMD_SORT:
            sort_data();
            break;
        case CMD_CHART:
            make_chart();
            break;
        case CMD_QUIT:
            if (confirm("确定要退出吗？")) quit();
            break;
        default:
            printf("命令错误，请重新选择\n");
        }
    }
    return 0;
}

void init(void)
{
    puts("库存管理系统启动");
}

void quit(void)
{
    puts("程序退出");
    exit(EXIT_SUCCESS);
}

void display_menu(void)
{
    printf("\n%d 读取 | %d 保存 | %d 打印 | %d 查询 | %d 添加\n"
           "%d 修改 | %d 删除 | %d 排序 | %d 图表 | %d 退出\n\n",
        CMD_READ, CMD_SAVE, CMD_PRINT, CMD_QUERY, CMD_INSERT,
        CMD_UPDATE, CMD_DELETE, CMD_SORT, CMD_CHART, CMD_QUIT);
}

int make_choice(void)
{
    int choice;
    int ok = 0;

    while (!ok) {
        printf("请选择：");
        ok = scanf("%d", &choice);
        scanf("%*[^\n]");
    }

    return choice;
}

int confirm(const char* msg)
{
    char c = 'n';
    printf("%s(Y/N): ", msg);
    scanf(" %c%*[^\n]", &c);
    return c == 'y' || c == 'Y';
}

// 零件库存储结构
#define NAME_LEN 31
#define MAX_PARTS 100

struct part {
    int number;
    char name[NAME_LEN + 1];
    int on_hand;
};

static struct part inventory[MAX_PARTS];
static int num_parts = 0;


int find_part(int part_number)
{
    for (int i = 0; i < num_parts; i++)
        if (inventory[i].number == part_number)
            return i;

    return -1; // not found
}

void query_data(void)
{
    puts("查询");
}

void add_data(void)
{
    puts("添加");
}

void update_data(void)
{
    puts("更新");
}

void delete_data(void)
{
    puts("删除");
}

void read_data(void)
{
    puts("读取");
}

void save_data(void)
{
    puts("保存");
}

void print_data(void)
{
    puts("打印");
}

void sort_data(void)
{
    puts("排序");
}

void make_chart(void)
{
    puts("图表");
}
